package cn.doitedu.day03

object MapValuesDemo {

  def main(args: Array[String]): Unit = {


    val lines: Array[String] = Array("spark hadoop flink", "spark hive", "hadoop spark spark", "flink spark hive flink flink hive")
    //你一定要明确，你对什么进行操作（数组或集合），数组或集合里面数据的类型
    //1.数组；里面装的数据是字符串类型
    //传入map方法的函数，输入的数据是字符串，即一行多个单词
    val words: Array[String] = lines.flatMap(_.split(" "))
    //分组
    val grouped: Map[String, Array[String]] = words.groupBy(x => x)
    //统计map的value的长度
    //对一个map结合进行map操作，取出来的是一个元组，元组的第一个元素，直接取出来，什么都没做，而是对元组的第二个进行了操作
    //val wordAndCount: Map[String, Int] = grouped.map(t => (t._1, t._2.length))
    //mapValues是对map集合中的values进行操作，函数的返回值，再跟对应的key放到元组中
    val wordAndCount: Map[String, Int] = grouped.mapValues(_.length)


    val res: List[(String, Int)] = wordAndCount.toList.sortBy(_._2).reverse

    println(res.toBuffer)




  }

}
